/*jQuery 扩展 */
/*		2016/5/18 星期三
var eiby = {
};
*/
//window.eiby = eiby;
/*
	http://www.cnblogs.com/silverLee/archive/2009/12/22/1629925.html
*/
//填补$中没有的方法,新方法												>新增方法
jQuery.extend({
	/**
		ajax请求公用参数
	**/
	ajaxPost: function(json,crypto)
	{
		if(this.empty(json) || typeof(json) != 'object'){
			json = {};
		}
		//数据加密处理
		if(!$.empty(crypto)){
			for(var k in json){json[k] = Base64.encode(json[k]+'$$'+(Math.ceil(Math.random()*10000)));}
		}		
		json['uid'] = Math.random();
		json['ajax'] = 'Y';
		return json;
	},
	/**
	空值数据检测
	**/
	empty: function(value)
	{
		if('undefined' == typeof(value)) return true;
		else if('undefined' == value)	return true;
		else if(value == null) return true;
		else if(value.length == 0) return true;
		//else if(value == '') return true;//字符串为空时
		else if('object' == typeof(value) && this.json_len(value) == 0) return true;	//空接json数据,该条件不够健壮
		else return null;
	},
	//是否已经设置变量
	unset: function(data)
	{
		if(typeof(data) == 'undefined') return true;
		return false;
	},
	/**
		json扩展
	**/
	json_len: function(json)
	{
		if(typeof(json) == 'object'){
			var len = json.length;
			if(isNaN(len)){
				len = 0;
				for(var k in json) len += 1;
				//len -= 1;
			}
			return len;
		}
		//return "输入的变量不属于json类型";
		this.log("json_len函数输入的参数不属于json类型");
		return false;
	},
			//系统日期
	sysDate : function(fmt)
	{
		var cur_date = new Date();
		var cur_year = cur_date.getFullYear();
		var cur_month = cur_date.getMonth()+1;
		var cur_day = cur_date.getDate();
		if(fmt == 'Y')
		{
			return cur_year;
		}
		else if(fmt == 'M')
		{
			return cur_month;
		}
		else if(fmt == 'D')
		{
			return cur_day;
		}
		else if(fmt == 'L')	//本地化日期
		{
			return cur_date.toLocaleFormat("%Y-%m-%d %p %H:%M:%S %a");
		}
		else if(fmt != '')
		{
			return cur_year+fmt+cur_month+fmt+cur_day;
		}
		else
		{
			//return cur_year+'-'+cur_month+'-'+cur_day;
			return cur_date.toLocaleFormat("%Y-%m-%d");
		}
	},
		//系统时间方法2  见：P393   2015/12/27		d.toLocaleFormat 浏览器间兼容存在问题
	sysdate:function(fmt)
	{
		var d = new Date();
		var format = {"Y":d.getFullYear(),"M":d.getMonth()+1,"D":d.getDate(),"FD":d.toLocaleFormat("%Y-%m-%d"),"FT":d.toLocaleFormat("%Y-%m-%d %H:%M:%S"),"FC":d.toLocaleFormat("%Y-%m-%d %p %H:%M:%S %a")};
		if('undefined' == typeof(fmt)) fmt = 'FD';
		return format[fmt];
		
	},
		//获取当前时间	2016/4/14
	time: function(){return this.sysdate('FT')},
		//获取当前的日期	2016/5/10 星期二
	date: function(){return this.sysdate("FD");},
		//获取月末时间
	/**
		console.log防止浏览器间的不兼容性
	**/
	log: function(val)
	{
		var con = window.console;
		if(this.empty(con)){
			return '您的浏览器不支持console！！';
		}
		console.log(val);
	},
	/**
	 * 使用 hre
	 */
	url_get: function(key)
	{
		var search = location.search;
		search = search.substring(1);
		search = search.replace(/=/g,'":"');
		search = '{"'+search.replace(/&/g,'","')+'"}';
		var data = $.parseJSON(search);
		if(typeof(data[key]) == 'undefined') return data;
		return data[key];
	},
		//随机颜色
	randColor : function(option)
	{
		return '#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).slice(-6);
	}
}); 
//使用eiby命名空间，一般用作对jQuery的原有方法		>改进方法
jQuery.TeClan = {
	//初始化插件, 空函数用作接口
	init: function(){},
	start: function(){
		this.init();
		//URL相关参数“参数隐蔽”
		var urlJSON = this.parseURL();
		this.url = urlJSON['url'];
		this.app = urlJSON['app'];
		this.path = urlJSON['path'];

		this.js = urlJSON['url']+'www/js/';
		this.css = urlJSON['url']+'www/js/';
		this.img = urlJSON['url']+'www/js/';

	},
	title: function(title,type)
	{
		var ori_title = $("title").html();
		if($.empty(type)){
			if(ori_title.indexOf(title) == -1)/*title 是否检测*/
				title += ori_title;
		}
		$("title").html(title);
	},
		//pathname 解析路径
	parseURL: function(name)
	{
		var path = location.pathname;
		
		var urlArr = path.split('/');
		var app = urlArr.pop();
		var url = urlArr.join('/');
		if($.empty(app)){
			app = 'index';//2016年6月3日10:08:49 index首页特殊位置
			//url += '/index';
			path += 'index';
		}
		if(name == 'path') return path;
		if(name == 'app') return app;
		url += '/';
		if(name == 'url') return url;
		return {'app':app,'url':url,'path':path};
	},
	/**
	 * 路径解析方式2	2016年6月3日11:41:56
	 * http://www.gzsggzyjyzx.cn/content?cls=1&id=INF-20160000434
	 */
	parse_url: function(url,name)
	{
		url = $.empty(url)? location.href:url;
		if($.empty(url)) return '';
		var json = {};
		var arr2 = url.split('/');
		if(url.indexOf('://')>-1){
			var arr = url.split("://");
			json['protocol'] = arr.shift();	// http
			arr = arr[0];
			arr2 = arr.split('/');
		}
		if(arr2[0].indexOf('.')>-1){
			json['host'] = arr2.shift();	// www.gzsggzyjyzx.cn
			arr2 = arr2[0];
			json['host_req'] = arr2;
		}else{
			json['host'] = '';
			arr2 = url;
			//$.log('arr2='+arr2);
		}
		var idxof = arr2.indexOf('?');
		json['url'] = url;
		if(idxof>-1){//有参数时解析
			var param = arr2.slice(idxof+1);
			var p_url = arr2.slice(0,idxof);
			json['url'] = url.slice(0,url.indexOf('?'+param));
			json['param_str'] = param;
			json['host_req'] = p_url;
			
			if(!$.empty(param)){
				var reg1 = new RegExp('&','g');
				param = param.replace(reg1,'","');
				var reg2 = new RegExp('=','g');
				param = param.replace(reg2,'":"');
				param = '{"'+param+'"}'
				param = $.parseJSON(param);
			}
			json['param'] = param;			
		}
		//$.log(json);
		if(!$.unset(name)) return json[name];//有参数时返回指定的值
		return json;
	},
	url_get: function(key)
	{
		var param = location.search;
		if(param.indexOf('?') == -1) return '';
		param = param.replace("?","");
		param = param.replace(/=/g,'":"');
		var arr = param.split("&");
		var n1 = '{"'+arr.join('","')+'"}';
		var json = $.parseJSON(n1);
		if(this.isset(key)){
			return json;
		}
		n1 = $.empty(json[key])? '': json[key];
		return n1;
	},
		//toJson serializeArray() 数组转json数据		2016/1/9
		//	替代getInputVal获取逐个表单数据
	toJson: function(array)
	{
		if($.empty(array)) return;
		var json = {};
		for(var k in array){
			json[array[k]['name']] = array[k]['value'];
		}
		return json;
	},
	//json 的length  2016/5/10 星期二     json无length属性
	count: function(json)
	{
		var len = json.length;//扩展不同类型的长度计算，适用性（2016/5/26 星期四）
		if(typeof(json) == 'object'){//object 类型
			if(isNaN(len)){
				len = 0;
				for(var k in json) len += 1;
				//len -= 1;
			}
			return len;
		}
		//return "输入的变量不属于json类型";
		this.log("json_len函数输入的参数不属于json类型");
		return false;
	},
	unset_keys: function(keys,json)
	{
	},
		//2016/1/16		toJson 改进方法
		//select  选择器（表单选择器）
	form: function(select)
	{
		var arr = $(select).serializeArray();
		return this.toJson(arr);
	},
	/**
		$.post更新,以及接口  ajax返回接口
		feek 函数
	**/
	post: function(url,json,feek){
		$.post(url,$.ajaxPost(json,true),feek);
	},
	
	empty: function(value){return $.empty(value);},//hyang方法迁移自适应
	log: function(value){return $.log(value);},//hyang方法迁移自适应
	isset: function(value){return $.unset(value);},//hyang方法迁移自适应
	
			//smp_check 简单 checked方法	2016/4/25
	/*
	 *	@ *check 检测， *data 数据库数据或者表单数据选择器
	 *	可选： tip  自定义提示文本  必须包含 $(tpl)
	 *	可选： xhtml  html提示列，并且具有参数正确性检测功能。扩展参数“2016/5/15 星期日”
	 *	返回: bool		
	 *	按表单的名称“name”属性为准
	 */
	check: function(check,data,tip,xhtml)
	{
		if(this.empty(check)){
			$.log('请输入check参数！');
			return false;
		}
		var fEle = '[name="\'+k+\'"]';//聚焦元素
		if(typeof(data) != 'object'){
			fEle = '$("'+data+'").find('+fEle+').focus()';
			data = this.form(data);
		}
		if(this.empty(check)){
			$.log('无法获取到数据！');
			return false;
		}
		var tip_temp = this.empty(tip)? '请输入【tpl】' : tip;
		for(var k in check)
		{
			if(this.empty(data[k])){
				tip = tip_temp.replace(/tpl/g,check[k]);
				if(this.empty(xhtml) || $(xhtml).length == 0)
					alert(tip);
				else
					$(xhtml).html(tip);
				$('[name="'+k+'"]').focus();
				eval(fEle);
				return true;
			}
		}
	},
	/*
		快速简洁非空检测	2016年7月17日
		id 表单id
		arr 必填列表{key:desc}
		tip 提示方式 #id/alert
	*/
	check2: function(id,arr,tip){		
		if(typeof(arr) != 'object') return null;
		var data = $("#"+id).serializeArray();
		var key,value,tiptext;
		for(var k in data){
			key = data[k]['name'];
			value = data[k]['value'];
			if(!$.empty(arr[key]) && $.empty(value)){
				tiptext = arr[key]+"不可为空,需必填";
				$("#"+id).find('input[name="'+key+'"]').focus();
				if(tip == 'alert' || $.empty(tip)){
					alert(tiptext);					
				}else{
					$("#"+tip).html(tiptext);
					var clean = function(){
						$("#"+tip).html("");
					};
					setTimeout(clean,3000);
				}
				return true;
			}
		}		
		return null;
	},
	/********************************Doeeking/Hyang.js迁移 begin******************************/
	/*	2016/2/28	
	 *	将：array/json转为json字符串	
	 *  进行递归调用
	*/
	toString:function(json)
	{
		if(this.empty(json))
			return;
		var str = '';
		var strArr = new Array();
		var val = '';//undefined 数据清除避免对$.parseJSON函数的干扰,测试结果不奏效
		for(var k in json)
		{
			if('object' == typeof(json[k])){
				strArr.push('"'+k+'":'+this.toString(json[k]));//递归调用
			}else{
				val = this.empty(json[k])? '' : json[k];
				strArr.push('"'+k+'":"'+val+'"');
			}
		}
		return '{'+strArr.join(",")+'}';
	},
		//sessionStorage 会话存储，关闭网页后自动清除
	session: function(name,value)
	{
		//if(this.empty(Window.sessionStorage)){this.log('浏览器不支持 sessionStorage');}
		if(this.isset(window.sessionStorage)){this.log('浏览器不支持 sessionStorage');}
		if(this.empty(name)) return null;
		/* //方式 1
		//if(this.empty(value))	return sessionStorage[name];	//获取sessionStorage
		if(this.isset(value))	return sessionStorage[name];	//获取sessionStorage
		sessionStorage[name] = value;		//设置sessionStorage
		*/
			//方式2	2016/4/8
		if($.unset(value))	return sessionStorage.getItem(name);
		sessionStorage.setItem(name,value);
		return true;
	},
		//loaclstroge 本地存储	2016/4/8
	local: function(name,value)
	{
		if(this.isset(window.localStorage)){$.log('浏览器不支持 localStorage');}
		if($.unset(name)) return false;
		if($.unset(value))	return localStorage.getItem(name);
		localStorage.setItem(name,value);
		return true;
	},
	/**
	 * storage扩展 app_后缀
	 * 制空存在问题
	 * type 方式默认session
	 **/
	pageStore: function(name,value,type,suffix)
	{
		var key = this.parseURL('app');
		if(!$.empty(name) && name.indexOf('/')>-1){//支持  key/name=> value
			var parseName = name.split('/');
			key = parseName[0];
			name = parseName[1];
		}
		if(!$.empty(suffix)) key += '_'+suffix;
		type = $.empty(type)? 'S':'L';//	session/local
		var data = type == 'S'? this.session(key) : this.local(key);
		if($.empty(data)) data = {};
		else data = Base64.decode(data);//数据解密
		if($.unset(value)){//数据返回
			try {
				data = $.parseJSON(data);
				if(!$.unset(data[name])) return Base64.decode(data[name]);
				return '';
			} catch (error) {
				return '';
			}
		}else{//设置数据
			try {
				data = $.parseJSON(data);
			} catch (error) {
				data = {};
			}
			data[name] = Base64.encode(value);
			data = Base64.encode(this.toString(data));
			if(type == 'S') this.session(key,data);
			else this.local(key,data);
		}
	},
	/********************************Doeeking/Hyang.js迁移 end******************************/
	/**
	 * 表单禁止/解禁   默认为： 可用解禁》  dis有输入时禁止
	 **/
	iptable: function(sel,dis)
	{
		if($.empty(sel)){ $.log('iptable函数sel参数不可为空');return false;}
		if($.unset(dis)) $(sel).attr('disabled',false);
		else $(sel).attr('disabled',true);
	},
	/**
	 * emp_go()
	 */
	emp_go: function(name)
	{
		var url = this.parseURL('url');
		this.start();
		url += name;
		if($.empty(name)) return;
		location.href = url;
	},
	/**
	 * 数据切换导航(简单，不保存)
	 */
	bar: function(sel,arr)
	{
		if(typeof(arr) != 'object'){$.log('bar函数，arr参数格式不正确');return;}
		//if($.empty(sel)){$.log('bar函数，sel参数格式不正确');return;}
		for(var k in arr){
			if($(arr[k]).css('display') != 'none')//提高运行速度
				$(arr[k]).hide();
		}
		if($.empty(sel)) return null;
		$(sel).show();
	},
	//post_feek: function(data){},
	dialog: function(html,title){		
		var dia = $("#page_dialog");
		if(dia.length<1) return '';//无效自动撤销
		if(html == 'close'){//关闭视图对话框
			$('#page_dialog').hide();
			return;
		}
		if(this.empty(title)){
			$("#pdialog_title").hide();
		}else{
			$("#pdialog_title").show();
			$("#pdialog_title").html(title);
		}
		$('#dialog_ctt').html(html);
		$('#page_dialog').show();
	},
	//	浮动框可拖动
	dialog_trage: function(){
		 // 浮动框拖动设置
		var move = false;
		var _x,_y;
		//mousemove 鼠标移到dom上
		$('#page_dialog').mousedown(function(e){
			move = true;
			_x=e.pageX-parseInt($("#page_dialog").css("left"));
			_y=e.pageY-parseInt($("#page_dialog").css("top")); 
			//$.log(_x+':'+_y);
		});
		$(document).mousemove(function(e){
			if(move){
				var x=e.pageX-_x;//控件左上角到屏幕左上角的相对位置
				var y=e.pageY-_y;
				$('#page_dialog').css({"top":y,"left":x});
				$("#page_dialog").css({'cursor':'move'});//pointer 手型，
				//$('html').css({'cursor':'pointer'});//pointer 手型，move 移动型
			}
		}).mouseup(function(){
			move=false;
		//$('html').css({'cursor':'auto'});//pointer 手型，
		}); 
	},
	//	浮动框-全屏/切换
	dialog_full: function(){
		//isfulle="N" bind=""
		var isfull = $('#dialog_full_btn').attr('isfull');
		var bind = $('#dialog_full_btn').attr('bind');
		var fscreep = {};
		if('N' == isfull){
			if($.empty(bind)){
				var width = $('#dialog_full_btn').css('width');
				var height = $('#dialog_full_btn').css('height');
				var str = Base64.encode('{"width":"'+width+'","height":"'+height+'"}');
				$('#dialog_full_btn').attr('bind',str);
			}
			fscreep = {'left':'0px','right':'0px','bottom':'0px','top':'0px'};
			$('#dialog_full_btn').removeAttr('isfull');
			$('#dialog_full_btn').attr('isfull','Y');
			$('#dialog_full_btn').text('还原');
		}else{
			$('#dialog_full_btn').removeAttr('isfull');
			$('#dialog_full_btn').attr('isfull','N');
			$('#dialog_full_btn').text('全屏');
			if(!$.empty(bind)){
				fscreep = $.parseJSON(Base64.decode(bind));
			}
		}
		$('#page_dialog').css(fscreep);
	},
	//----------------------系统设置
	//url:	'/eiby/',//js动态获取
	js:this.url+'www/js/',
	css:this.url+'www/css/',
	img:this.url+'www/img/',
	/*url: '',
	app: '',
	path: '',
	*/
	/**
		屏幕高度宽带获取
	**/
	wid:	document.documentElement.clientWidth,
	hei: document.documentElement.clientHeight
};

/**
 * 框架公用特殊函数“较少”
 */
//jQuery.www = {};
/**
 * epm级别公用特殊函数“较少”
 */
//jQuery.epm = {};
/**
*
*  Base64 encode / decode
*
*  @author haitao.tu
*  @date   2010-04-26
*  @email  tuhaitao@foxmail.com
*	//2016年5月29日10:36:11  实际项目采用 crypto.js库(由于翻墙软件失败未获取到)
*/
var Base64 = {
	// private property
	_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
	// public method for encoding
	encode: function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
		input = this._utf8_encode(input);
		while (i < input.length) {
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
		}
		return output;
	},
 
	// public method for decoding
	decode: function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		while (i < input.length) {
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
			output = output + String.fromCharCode(chr1);
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
		}
		output = this._utf8_decode(output);
		return output;
	},
 
	// private method for UTF-8 encoding
	_utf8_encode:function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			} else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			} else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode:function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
		while ( i < utftext.length ) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			} else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			} else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
		return string;
	}
};
